--USE MASTER 
--GO

--DROP DATABASE Griferos
--GO

--CREATE DATABASE Griferos
--GO

--USE Griferos
--GO

IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Colaborador' )
BEGIN
	DROP TABLE Colaborador;
END
GO


CREATE TABLE Colaborador
(
	IdColaborador INTEGER NOT NULL IDENTITY(1, 1), 
	DocumentoIdentidad INTEGER NOT NULL,
	TipoDocumento CHAR NOT NULL,
	Nombres VARCHAR(100) NOT NULL,
	Apellidos VARCHAR(100) NOT NULL,
	Telefono VARCHAR(20) NOT NULL,
	Domicilio VARCHAR(500) NOT NULL,
	Estado CHAR
)
GO 

ALTER TABLE Colaborador ADD CONSTRAINT PK_Colaborador PRIMARY KEY (IdColaborador);
GO

ALTER TABLE Colaborador ADD CONSTRAINT CK_EstadoColaborador CHECK (Estado = 'A' OR Estado = 'I');
GO



IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'FaltantesSobrantes' )
BEGIN
	DROP TABLE FaltantesSobrantes;
END
GO


CREATE TABLE FaltantesSobrantes
(
	IdColaborador INTEGER NOT NULL,
	FechaIngreso DATE NOT NULL,
	Faltante NUMERIC(10, 2),
	Sobrante NUMERIC(10, 2)
)
GO

ALTER TABLE FaltantesSobrantes ADD CONSTRAINT PK_FaltantesSobrantes PRIMARY KEY (IdColaborador, FechaIngreso);
GO


IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Mes' )
BEGIN
	DROP TABLE Mes;
END
GO


CREATE TABLE Mes
(
	IdMes INTEGER NOT NULL,
	NombreMes VARCHAR(20) NOT NULL
)


ALTER TABLE Mes ADD CONSTRAINT PK_Mes PRIMARY KEY (IdMes);
GO


IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Ventas' )
BEGIN
	DROP TABLE Ventas;
END
GO


CREATE TABLE Ventas
(
	IdColaborador INTEGER NOT NULL,
	Anio INTEGER NOT NULL DEFAULT  (YEAR(GETDATE())),
	IdMes INTEGER NOT NULL,
	VentasContado NUMERIC(10, 2),
	VentasCredito NUMERIC(10, 2)
)

ALTER TABLE Ventas ADD CONSTRAINT PK_Ventas PRIMARY KEY (IdColaborador, IdMes);
GO


IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Errores' )
BEGIN
	DROP TABLE Errores;
END
GO


CREATE TABLE Errores
(
	IdError INTEGER NOT NULL IDENTITY (1, 1),
	NombreError VARCHAR(500),
	Estado CHAR
)


ALTER TABLE Errores ADD CONSTRAINT PK_Errores PRIMARY KEY (IdError);
GO

ALTER TABLE Errores ADD CONSTRAINT CK_EstadoError CHECK (Estado = 'A' OR Estado = 'I');
GO



IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ErroresPorColaborador' )
BEGIN
	DROP TABLE ErroresPorColaborador;
END
GO


CREATE TABLE ErroresPorColaborador
(
	IdError INTEGER NOT NULL,
	IdColaborador INTEGER NOT NULL,
	FechaIngreso DATE NOT NULL,
	Cantidad INTEGER NOT NULL,
	Observaciones VARCHAR(1000)
)
GO

ALTER TABLE ErroresPorColaborador ADD CONSTRAINT PK_ErroresPorColaborador PRIMARY KEY (IdError, IdColaborador, FechaIngreso);
GO

IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'DiasLaborados' )
BEGIN
	DROP TABLE DiasLaborados;
END
GO


CREATE TABLE DiasLaborados
(
	IdColaborador INTEGER NOT NULL,
	IdMes INTEGER NOT NULL,
	Anio INTEGER NOT NULL,
	CantidadDias INTEGER NOT NULL
)
GO

ALTER TABLE DiasLaborados ADD CONSTRAINT PK_DiasLaborados PRIMARY KEY (IdColaborador, IdMes, Anio);
GO

IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Despachos' )
BEGIN
	DROP TABLE Despachos;
END
GO


CREATE TABLE Despachos
(
	IdColaborador INTEGER NOT NULL,
	IdMes INTEGER NOT NULL,
	Anio INTEGER NOT NULL,
	DespachosEmitidos INTEGER NOT NULL,
	DespachosNoBoleteado INTEGER NOT NULL
)
GO

ALTER TABLE Despachos ADD CONSTRAINT PK_Despachos PRIMARY KEY (IdColaborador, IdMes, Anio);
GO




ALTER TABLE FaltantesSobrantes ADD CONSTRAINT FK_FaltantesSobrantesColaborador FOREIGN KEY (IdColaborador)
	REFERENCES Colaborador (IdColaborador);

ALTER TABLE Ventas ADD CONSTRAINT FK_VentasColaborador FOREIGN KEY (IdColaborador)
	REFERENCES Colaborador (IdColaborador);

ALTER TABLE Ventas ADD CONSTRAINT FK_VentasMes FOREIGN KEY (IdMes)
	REFERENCES Mes (IdMes);

ALTER TABLE ErroresPorColaborador ADD CONSTRAINT FK_ErroresColaboradorErrores FOREIGN KEY (IdError)
	REFERENCES Errores (IdError);

ALTER TABLE ErroresPorColaborador ADD CONSTRAINT FK_ErroresColaboradorColaborador FOREIGN KEY (IdColaborador)
	REFERENCES Colaborador (IdColaborador);

ALTER TABLE DiasLaborados ADD CONSTRAINT FK_DiasLaboradosColaborador FOREIGN KEY (IdColaborador)
	REFERENCES Colaborador (IdColaborador);

ALTER TABLE DiasLaborados ADD CONSTRAINT FK_DiasLaboradosMes FOREIGN KEY (IdMes)
	REFERENCES Mes (IdMes);
	
ALTER TABLE Despachos ADD CONSTRAINT FK_ColaboradorDespachos FOREIGN KEY (IdColaborador)
	REFERENCES Colaborador (IdColaborador);

ALTER TABLE Despachos ADD CONSTRAINT FK_MesDespachos FOREIGN KEY (IdMes)
	REFERENCES Mes (IdMes);

